package com.jxwifi.cloud.quickcleanserver.utils;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.provider.Settings;
import android.support.v4.app.NotificationManagerCompat;
import android.widget.Toast;

import static android.provider.Settings.EXTRA_APP_PACKAGE;
import static android.provider.Settings.EXTRA_CHANNEL_ID;
import static com.alibaba.sdk.android.ams.common.global.AmsGlobalHolder.getPackageName;

/**
 * 验证手机是否已开启通知权限
 * Created by Administrator on 2019/6/18.
 */

public class NotifySetting {

    public static void checkNotifySetting(final Context context) {
        NotificationManagerCompat manager = NotificationManagerCompat.from(context);
        // areNotificationsEnabled方法的有效性官方只最低支持到API 19，低于19的仍可调用此方法不过只会返回true，即默认为用户已经开启了通知。
        boolean isOpened = manager.areNotificationsEnabled();

        if (!isOpened) {
            try{
                new AlertDialog.Builder(context)
                        .setTitle("通知服务")//定位服务已关闭
                        .setMessage("通知权限已关闭，请设置打开")
                        .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                dialog.dismiss();
                            }
                        })
                        .setPositiveButton("设置", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                //前往应用详情界面
                                // 根据isOpened结果，判断是否需要提醒用户跳转AppInfo页面，去打开App通知权限
                                Intent intent = new Intent();
                                intent.setAction(Settings.ACTION_APP_NOTIFICATION_SETTINGS);
                                if (Build.VERSION.SDK_INT>=26){
                                    //这种方案适用于 API 26, 即8.0（含8.0）以上可以用
                                    intent.putExtra(EXTRA_APP_PACKAGE, getPackageName());
                                    intent.putExtra(EXTRA_CHANNEL_ID, context.getApplicationInfo().uid);
                                }else if (Build.VERSION.SDK_INT>21||Build.VERSION.SDK_INT<25){
                                    //这种方案适用于 API21——25，即 5.0——7.1 之间的版本可以使用
                                    intent.putExtra("app_package", getPackageName());
                                    intent.putExtra("app_uid", context.getApplicationInfo().uid);
                                }
                                context.startActivity(intent);
                                dialog.dismiss();
                            }
                        }).create().show();

            }catch (Exception e) {
                e.printStackTrace();
                // 出现异常则跳转到应用设置界面：锤子坚果3——OC105 API25
                Intent intent = new Intent();
                //下面这种方案是直接跳转到当前应用的设置界面。
                //https://blog.csdn.net/ysy950803/article/details/71910806
                intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                Uri uri = Uri.fromParts("package", getPackageName(), null);
                intent.setData(uri);
                context.startActivity(intent);
            }
        }
    }
}
